Skip to content

🐛 fix(generator): 规范化非法 Java 标识符 - #96

Merged
ZhaoXingPeng merged 1 commit into
mainfrom
fix/95-java-identifiers
Sep 7, 2026
Merged

ZhaoXingPeng merged 1 commit into
mainfrom
fix/95-java-identifiers

Conversation

@ZhaoXingPeng

@ZhaoXingPeng ZhaoXingPeng commented Sep 7, 2026 •

Copy link
Copy Markdown
Owner

关联 Issue

Closes #95

背景(Situation)

真实数据库允许连字符、空格、数字开头和 Java 保留字作为表名或列名。原有转换会把 order-item 生成成非法的 Order-item,把 class 直接作为 Java 字段;核心模型、现代模板和 legacy 模板还各自维护命名逻辑,生成源码可能无法编译。

任务(Task)

建立共享的 Java 标识符规范化规则,覆盖分隔符、数字起始、空名称和关键字;保持数据库原始标识符用于 SQL/ORM 映射,并让所有生成路径使用同一规则。

行动(Action)

  • 新增共享 core.java_identifiers,统一 PascalCase、camelCase 和关键字后缀规则。
  • TableInfo、TemplateContextBuilder、legacy TemplateContext 与 AI 命名规则改用共享实现。
  • 增加特殊表名、列名和标准 snake_case 的回归测试。
  • 没有做什么:不修改数据库原名、SQL、表结构或非 Java 输出;未测性能收益。

验证(Verification)

环境:Windows 11,Python 3.12.12。

  • PYTHONPATH=src python -m pytest tests/unit/ -q:638 passed。
  • 特殊名称定向测试:143 passed。
  • ruff check src tests scripts 与变更文件 ruff format --check:通过。

实验与证据(Evidence)

输入表名 order-item、列名 class 和 123_display-name,输出分别为 OrderItem、class_、generated123DisplayName,均通过 Java 标识符校验;tableName 和原始列名仍保持数据库值。标准 sys_user 输出未改变。

兼容性、风险与回滚

  • 公共 API / 数据格式 / 迁移:生成 context 新增统一命名行为,数据库元数据字段不变。
  • 风险与已知限制:特殊名称的旧非法类名/字段名会改变;未覆盖所有 Unicode 标识符和真实 Java 编译矩阵。
  • 回滚:revert 对应提交即可恢复旧命名逻辑。
  • 后续 Issue:若需支持更完整的 Unicode Java 标识符,应独立设计规则和编译实验。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

问题复现:TableInfo(name="order-item").entity_name 原来得到 Order-item,包含连字符;TemplateContextBuilder 对列名 class 原样生成 class。这两种结果分别会破坏 Java 类声明和字段声明,属于可直接复现的生成器缺陷。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

实现实验:输入表名 order-item、列名 class、123_display-name,共享规则输出 OrderItem、class_、generated123DisplayName;tableName 与列的 name 字段仍是原始数据库名称,SQL/ORM 映射不会被改写。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

测试记录:核心模型、现代模板上下文、legacy 模板上下文和 AI 命名规则定向测试 143 passed;全量单测 638 passed,Ruff lint/format 均通过。此修复未建立前后运行时基准,性能未测量,不宣称性能提升。

@ZhaoXingPeng
ZhaoXingPeng merged commit 61422dc into main Sep 7, 2026
10 checks passed
@ZhaoXingPeng
ZhaoXingPeng deleted the fix/95-java-identifiers branch September 9, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 fix(generator): 规范化非法 Java 标识符

1 participant